Функц.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 

(*~\Глагол\Отделы\Числа~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                        ОТДЕЛ Функц;
(*============================================================================*
 * НАЗНАЧЕНИЕ: специальные функции
 *----------------------------------------------------------------------------*
 * ПРИМЕЧАНИЯ: в особых случаях в <Матем.код> записывается # 0 значение.
 * Источники, ссылки, библиография
 *============================================================================*)
ИСПОЛЬЗУЕТ
  Матем;
ВИД
  Вещ = Матем.Вещ;
  ТаблКоэф = РЯД 10 ИЗ Вещ;
ПОСТ
  ТАБЛФАКТ = 34;  (* размер таблицы, хранящей факториалы небольших чисел *)
  МАКСФАКТ = 170; (* наибольший аргумент для вычисления факториала *)
  
                  (* для НепГ и НепБета *)
  BIG    = 9.223372036854775808D18;
  BIGINV = 1.084202172485504434007D-19;
                  (* для Г функций *)
  МАКСГ = 171.624376956302D0;
  МАКСЛНГ = 2.556348D+305;
ПЕР
  STIR,STIRP,GAMS,GAMSN,GAMP,GAMQ,LNGAMP,LNGAMQ:ТаблКоэф;
  INP0,INP1,INP2,INP3:ТаблКоэф;
  INQ0,INQ1,INQ2,INQ3:ТаблКоэф;
  ТаблФакт:РЯД ТАБЛФАКТ ИЗ Вещ;  (* таблица факториалов небольших чисел *)
  i:ЦЕЛ;

(*-оооооооооооооо- опережающие определения/заготовки задач -ооооооооооооооооо-*)

ЗАДАЧА^ Факториал-(x:Вещ):Вещ;   (* факториал                        *)
ЗАДАЧА^ БиномКоэф-(x,y:Вещ):Вещ; (* биномиальные коэффициенты C(n,k) *)
ЗАДАЧА^ Г-(x:Вещ):Вещ;           (* Гамма функция                    *)
ЗАДАЧА^ ЗнакГ-(x:Вещ):ЦЕЛ;       (* Знак Гамма функции - Г(x)        *)
ЗАДАЧА^ lnГ-(x:Вещ):Вещ;         (* ln(|Г(x)|)                       *)
ЗАДАЧА^ НепГ-(a,x:Вещ):Вещ;      (* неполная Гамма функция           *)
ЗАДАЧА^ ДопГ-(a,x:Вещ):Вещ;      (* дополнение НепГ                  *)
ЗАДАЧА^ Бета-(x,y:Вещ):Вещ;      (* Бета функция                     *)
ЗАДАЧА^ НепБета-(a,b,x:Вещ):Вещ; (* неполная Бета функция            *)
ЗАДАЧА^ erf-(x:Вещ):Вещ;         (* функция ошибок                   *)
ЗАДАЧА^ erfc-(x:Вещ):Вещ;        (* дополнительная функция ошибок    *)

(*----------------------------------------------------------------------------*
 * Биномиальное распределение с вероятностью < p > и числом испытаний < n >
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ БиномВ-(n:ЦЕЛ; p:Вещ; k:ЦЕЛ):Вещ; (* p(x  = k) *)
ЗАДАЧА^ БиномП-(n:ЦЕЛ; p:Вещ; k:ЦЕЛ):Вещ; (* p(x <= k) *)

(*----------------------------------------------------------------------------*
 * Распределение Пуассона со средним значением < Mu >
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ ПуассонВ-(Mu:Вещ; k:ЦЕЛ):Вещ;  (* p(x  = k) *)
ЗАДАЧА^ ПуассонП-(Mu:Вещ; k:ЦЕЛ):Вещ;  (* p(x <= k) *)

(*----------------------------------------------------------------------------*
 * Стандартный нормальный закон распределения
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ НормПл-(x:Вещ):Вещ;   (* Плотность распределения *)
ЗАДАЧА^ НормП-(x:Вещ):Вещ;    (* p( U <= x) *)
ЗАДАЧА^ НормВ-(x:Вещ):Вещ;    (* p(|U|>=|x|) *)
ЗАДАЧА^ ОбрНорм-(p:Вещ):Вещ;  (* Возвращает такое , что p(U <= x) = < p > *)

(*----------------------------------------------------------------------------*
 * Распределение Стьюдента с < Nu > степенями свободы
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ СтьюдентПл-(Nu:ЦЕЛ; x:Вещ):Вещ;  (* Плотность распределения *)
ЗАДАЧА^ СтьюдентП-(Nu:ЦЕЛ; x:Вещ):Вещ;   (* p( t <= x) *)
ЗАДАЧА^ СтьюдентВ-(Nu:ЦЕЛ; x:Вещ):Вещ;   (* p(|t|>=|x|) *)

(*----------------------------------------------------------------------------*
 * Распределение Хи квадрат с < Nu > степенями свободы
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ Хи2Пл-(Nu:ЦЕЛ; x:Вещ):Вещ;  (* Плотность распределения Хи2 *)
ЗАДАЧА^ Хи2П-(Nu:ЦЕЛ; x:Вещ):Вещ;   (* p(Khi2 <= x) *)
ЗАДАЧА^ Хи2В-(Nu:ЦЕЛ; x:Вещ):Вещ;   (* p(Khi2 >= x) *)

(*----------------------------------------------------------------------------*
 * Распределение Фишера с < Nu1 > и < Nu2 > степенями свободы
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ ФишерПл-(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ;  (* Плотность распределения *)
ЗАДАЧА^ ФишерП-(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ;   (* p(f <= x) *)
ЗАДАЧА^ ФишерВ-(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ;   (* p(f >= x) *)

(*----------------------------------------------------------------------------*
 * Экспоненциальное распределение
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ ЭкспПл-(a,x:Вещ):Вещ;  (* Плотность распределения *)
ЗАДАЧА^ ЭкспП-(a,x:Вещ):Вещ;   (* p( <= x) *)

(*----------------------------------------------------------------------------*
 * Бета распределение
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ БетаПл-(a,b,x:Вещ):Вещ;  (* Плотность распределения *)
ЗАДАЧА^ БетаП-(a,b,x:Вещ):Вещ;   (* p( <= x) *)

(*----------------------------------------------------------------------------*
 * Г-распределение
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ ГПл-(a,b,x:Вещ):Вещ;  (* Плотность распределения *)
ЗАДАЧА^ ГП-(a,b,x:Вещ):Вещ;   (* p( <= x) *)


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Горнер0(x:Вещ; a-:ТаблКоэф; n:ЦЕЛ):Вещ;
(*============================================================================*
(* Цель:  вычислить многочлен степени < n > 
 *
 *        y = a0xn + a1xn-1 +...+ an-1x1 + an
 *
 *  по схеме Горнера.
 *============================================================================*)
ПЕР
  i:ЦЕЛ;
  ответ:Вещ;
УКАЗ
  ответ:=a[0];
  ОТ i:=1 ДО n ВЫП
    ответ:=ответ*x+a[i]
  КОН;
  ВОЗВРАТ ответ
КОН Горнер0;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Горнер1(x:Вещ; a-:ТаблКоэф; n:ЦЕЛ):Вещ;
(*============================================================================*
(* Цель:  вычислить многочлен степени  
 *        
 *        y = xn + a0xn-1 +...+ an-2x1 + an-1
 *
 *  по схеме Горнера.
 *============================================================================*)
ПЕР
  ответ:Вещ;
  i:ЦЕЛ;
УКАЗ
  ответ:=x+a[0];
  ОТ i:=1 ДО n-1 ВЫП
    ответ:=ответ*x+a[i]
  КОН;
  ВОЗВРАТ ответ
КОН Горнер1;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ЗнакГ-(x:Вещ):ЦЕЛ;
УКАЗ
  ЕСЛИ (x > 0) ИЛИ НЕ ЧЕТ(ВШИРЦЕЛ(МОДУЛЬ(x))) ТО
    ВОЗВРАТ 1
  КОН;
  ВОЗВРАТ -1 
КОН ЗнакГ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Stirf(x:Вещ):Вещ;
(* Формула Стирлинга для Гамма функции:
 * Г(x) = Sqrt(2*Pi) * x^((x-0.5)*exp(-x)) * (1+(1/x)*p(1/x))
 * где p(x) является многочленом *)
ПЕР
  W,p:Вещ;
УКАЗ
  W:=1/x;
  ЕСЛИ x > 1024 ТО
    p:=6.97281375836585777429D-5*W + 7.84039221720066627474D-4;
    p:=p*W - 2.29472093621399176955D-4;
    p:=p*W - 2.68132716049382716049D-3;
    p:=p*W + 3.47222222222222222222D-3;
    p:=p*W + 8.33333333333333333333D-2;
  ИНАЧЕ
    p:=Горнер0(W,STIR,8) 
  КОН;
  ВОЗВРАТ Матем.КВКОР2ПИ*Матем.exp((x-0.5)*Матем.ln(x)-x)*(1+W*p)
КОН Stirf;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА GamSmall(x1,z:Вещ):Вещ;
(* Гамма функция для малых аргументов *)
ПЕР
  p:Вещ;
УКАЗ
  ЕСЛИ x1 = 0 ТО
    Матем.код:=Матем.ОСОБЕННОСТЬ;
    ВОЗВРАТ Матем.МАКСВЕЩ
  КОН;
  ЕСЛИ x1 < 0 ТО
    x1:=-x1;
    p:=Горнер0(x1,GAMSN,8)
  ИНАЧЕ
    p:=Горнер0(x1,GAMS,8) 
  КОН;
  ВОЗВРАТ z/(x1*p)
КОН GamSmall;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА StirfL(x:Вещ):Вещ;
(* Приближение ln(Г) формулой Стирлинга при x >= 13 *)
ПЕР
  q,W:Вещ;
УКАЗ
  q:=Матем.ln(x)*(x-0.5)-x;
  q:=q+Матем.ЛНКВКОР2ПИ;
  ЕСЛИ x > 1.E+10 ТО
    ВОЗВРАТ q
  ИНАЧЕ
    W:=1/Матем.кв(x);
    ВОЗВРАТ q+Горнер0(W,STIRP,6)/x
  КОН
КОН StirfL;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Г-(x:Вещ):Вещ;
ПЕР
  SgnGam,n:ЦЕЛ;
  a,x1,z:Вещ;
УКАЗ
  Матем.код:=0;
  SgnGam:=ЗнакГ(x);

  ЕСЛИ (x = 0) ИЛИ ((x < 0) И (ЦЕЛЧАСТЬ(x) = x)) ТО
    Матем.код:=Матем.ОСОБЕННОСТЬ;
    ВОЗВРАТ SgnGam*Матем.МАКСВЕЩ
  КОН;

  ЕСЛИ x > МАКСГ ТО
    Матем.код:=Матем.ПЕРЕПОЛНЕНИЕ;
    ВОЗВРАТ Матем.МАКСВЕЩ
  КОН;

  a:=МОДУЛЬ(x);
  ЕСЛИ a > 13 ТО
    ЕСЛИ x < 0 ТО
      n:=УЗК(ВШИРЦЕЛ(a));
      z:=a-n;
      ЕСЛИ z > 0.5 ТО
        n:=n+1;
        z:=a-n
      КОН;
      z:=МОДУЛЬ(a*Матем.sin(Матем.ПИ*z))*Stirf(a);
      ЕСЛИ z <= Матем.ПИ/Матем.МАКСВЕЩ ТО
        Матем.код:=Матем.ПЕРЕПОЛНЕНИЕ;
        ВОЗВРАТ SgnGam*Матем.МАКСВЕЩ
      КОН;
      z:=Матем.ПИ/z
    ИНАЧЕ
      z:=Stirf(x) 
    КОН;
    ВОЗВРАТ SgnGam*z
  ИНАЧЕ
    z:=1;
    x1:=x;
    ПОКА x1 >= 3 ВЫП
      x1:=x1-1;
      z:=z*x1
    КОН;
    ПОКА x1 < -0.03125 ВЫП
      z:=z/x1;
      x1:=x1+1
    КОН;
    ЕСЛИ x1 <= 0.03125 ТО
      ВОЗВРАТ GamSmall(x1,z)
    ИНАЧЕ
      ПОКА x1 < 2 ВЫП
        z:=z/x1;
        x1:=x1+1
      КОН;
      ЕСЛИ (x1 = 2) ИЛИ (x1 = 3) ТО
        ВОЗВРАТ z
      ИНАЧЕ
        x1:=x1-2;
        ВОЗВРАТ z*Горнер0(x1,GAMP,7)/Горнер0(x1,GAMQ,8)
      КОН
    КОН
  КОН
КОН Г;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА lnГ-(x:Вещ):Вещ;
ПЕР
  n:ЦЕЛ;
  a,x1,z:Вещ;
УКАЗ
  Матем.код:=0;

  ЕСЛИ (x = 0) ИЛИ ((x < 0) И (ЦЕЛЧАСТЬ(x) = x)) ТО
    Матем.код:=Матем.ОСОБЕННОСТЬ;
    ВОЗВРАТ Матем.МАКСВЕЩ
  КОН;

  ЕСЛИ x > МАКСЛНГ ТО
    Матем.код:=Матем.ПЕРЕПОЛНЕНИЕ;
    ВОЗВРАТ Матем.МАКСВЕЩ
  КОН;

  a:=МОДУЛЬ(x);
  ЕСЛИ a > 34 ТО
    ЕСЛИ x < 0 ТО
      n:=УЗК(ВШИРЦЕЛ(a));
      z:=a-n;
      ЕСЛИ z > 0.5 ТО
        n:=n+1;
        z:=n-a;
      КОН;
      z:=a*Матем.sin(Матем.ПИ*z);
      ЕСЛИ z = 0 ТО
        Матем.код:=Матем.ПЕРЕПОЛНЕНИЕ;
        ВОЗВРАТ Матем.МАКСВЕЩ
      КОН;
      z:=Матем.ЛНПИ-Матем.ln(z)-StirfL(a);
    ИНАЧЕ
      z:=StirfL(x) 
    КОН;
    ВОЗВРАТ z
  АЕСЛИ  x < 13 ТО
    z:=1;
    x1:=x;
    ПОКА x1 >= 3 ВЫП
      x1:=x1-1;
      z:=z*x1
    КОН;
    ПОКА x1 < 2 ВЫП
      ЕСЛИ МОДУЛЬ(x1) <= 0.03125 ТО
        ВОЗВРАТ Матем.ln(МОДУЛЬ(GamSmall(x1,z)))
      КОН;
      z:=z/x1;
      x1:=x1+1
    КОН;
    ЕСЛИ z < 0 ТО
      z:=-z
    КОН;
    ЕСЛИ x1 = 2 ТО
      ВОЗВРАТ Матем.ln(z)
    ИНАЧЕ
      x1:=x1-2;
      ВОЗВРАТ x1*Горнер0(x1,LNGAMP,6)/Горнер1(x1,LNGAMQ,7)+Матем.ln(z)
    КОН;
  ИНАЧЕ
    ВОЗВРАТ StirfL(x) 
  КОН 
КОН lnГ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА НепГ-(a,x:Вещ):Вещ;
ПЕР
  ответ,Ax,C,r:Вещ;
УКАЗ
  Матем.код:=0;

  ЕСЛИ (x <= 0) ИЛИ (a <= 0) ТО
    ВОЗВРАТ 0
  КОН;

  ЕСЛИ (x > 1) И (x > a) ТО
    ВОЗВРАТ 1-ДопГ(a,x)
  КОН;

  Ax:=a*Матем.ln(x)-x-lnГ(a);
  ЕСЛИ Ax < Матем.МИНЛН ТО
    Матем.код:=Матем.ОБНУЛЕНИЕ;
    ВОЗВРАТ 0
  КОН;

  Ax:=Матем.exp(Ax);

  (* степенной ряд *)
  r:=a;
  C:=1;
  ответ:=1;

  ПОВТОРЯТЬ 
    r:=r+1;
    C:=C*x/r;
    ответ:=ответ+C;
  ДО C/ответ <= Матем.МАШЕПС;

  ВОЗВРАТ ответ*Ax/a;
КОН НепГ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ДопГ-(a,x:Вещ):Вещ;
ПЕР
  ответ,C,Yc,Ax,y,z,r,T,
  Pk,Pkm1,Pkm2,Qk,Qkm1,Qkm2:Вещ;
УКАЗ
  Матем.код:=0;

  ЕСЛИ (x <= 0) ИЛИ (a <= 0) ТО
    ВОЗВРАТ 1
  КОН;

  ЕСЛИ (x < 1) ИЛИ (x < a) ТО
    ВОЗВРАТ 1-НепГ(a,x)
  КОН;

  Ax:=a*Матем.ln(x)-x-lnГ(a);

  ЕСЛИ Ax < Матем.МИНЛН ТО
    Матем.код:=Матем.ОБНУЛЕНИЕ;
    ВОЗВРАТ 0
  КОН;

  Ax:=Матем.exp(Ax);

  (* повторяющаяся дробь *)
  y:=1-a;
  z:=x+y+1;
  C:=0;
  Pkm2:=1;
  Qkm2:=x;
  Pkm1:=x+1;
  Qkm1:=z*x;
  ответ:=Pkm1/Qkm1;

  ПОВТОРЯТЬ 
    C:=C+1;
    y:=y+1;
    z:=z+2;
    Yc:=y*C;
    Pk:=Pkm1*z-Pkm2*Yc;
    Qk:=Qkm1*z-Qkm2*Yc;
    ЕСЛИ Qk # 0 ТО
      r:=Pk/Qk;
      T:=МОДУЛЬ((ответ-r)/r);
      ответ:=r
    ИНАЧЕ
      T:=1 
    КОН;
    Pkm2:=Pkm1;
    Pkm1:=Pk;
    Qkm2:=Qkm1;
    Qkm1:=Qk;
    ЕСЛИ МОДУЛЬ(Pk) > BIG ТО
      Pkm2:=Pkm2/BIG;
      Pkm1:=Pkm1/BIG;
      Qkm2:=Qkm2/BIG;
      Qkm1:=Qkm1/BIG
    КОН
  ДО T <= Матем.МАШЕПС;

  ВОЗВРАТ ответ*Ax
КОН ДопГ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Факториал-(x:Вещ):Вещ;
ПЕР
  n:ЦЕЛ;
УКАЗ
  n:=УЗК(ВШИРЦЕЛ(x));
  Матем.код:=0;
  ЕСЛИ n < 0 ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 1
  КОН;
  ЕСЛИ n > МАКСФАКТ ТО
    Матем.код:=Матем.ПЕРЕПОЛНЕНИЕ;
    ВОЗВРАТ Матем.МАКСВЕЩ
  КОН;
  ЕСЛИ n < ТАБЛФАКТ ТО
    ВОЗВРАТ ТаблФакт[n]
  ИНАЧЕ
    ВОЗВРАТ Г(n+1)
  КОН
КОН Факториал;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА БиномКоэф-(x,y:Вещ):Вещ;
ПЕР
  n,k,i,n1:ЦЕЛ;
  произв:Вещ;
УКАЗ
  n:=УЗК(ВШИРЦЕЛ(x));
  k:=УЗК(ВШИРЦЕЛ(y));
  Матем.код:=0;
  ЕСЛИ k < 0 ТО
    ВОЗВРАТ 0
  КОН;
  ЕСЛИ (k = 0) ИЛИ (k = n) ТО
    ВОЗВРАТ 1
  КОН;
  ЕСЛИ (k = 1) ИЛИ (k = n-1) ТО
    ВОЗВРАТ n
  КОН;
  ЕСЛИ k > n-k ТО k:=n-k КОН;
  n1:=n+1;
  произв:=n;
  ОТ i:=2 ДО k ВЫП
    произв:=произв*((n1-i)/i) 
  КОН;
  ВОЗВРАТ ВШИРЦЕЛ(произв)
КОН БиномКоэф;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Бета-(x,y:Вещ):Вещ;
(* Бета(x,y) = Г(x)*Г(y)(x+y) *)
ПЕР
  Lx,Ly,Lxy:Вещ;
  SgnBeta:ЦЕЛ;
УКАЗ
  Матем.код:=0;
  SgnBeta:=ЗнакГ(x)*ЗнакГ(y)*ЗнакГ(x+y);
  Lxy:=lnГ(x+y);
  ЕСЛИ Матем.код # 0 ТО
    ВОЗВРАТ 0
  КОН;
  Lx:=lnГ(x);
  ЕСЛИ Матем.код # 0 ТО
    ВОЗВРАТ SgnBeta*Матем.МАКСВЕЩ
  КОН;
  Ly:=lnГ(y);
  ЕСЛИ Матем.код # 0 ТО
    ВОЗВРАТ SgnBeta*Матем.МАКСВЕЩ
  КОН;
  ВОЗВРАТ SgnBeta*Матем.exp(Lx+Ly-Lxy)
КОН Бета;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА PSeries(a,b,x:Вещ):Вещ;
(* Степенной ряд для неполного бета интеграла.
 * Используется когда b*x мало. *)
ПЕР
  s,T,U,V,T1,z,Ai:Вещ;
  n:ЦЕЛ;
УКАЗ
  Ai:=1/a;
  U:=(1-b)*x;
  V:=U/(a+1);
  T1:=V;
  T:=U;
  n:=2;
  s:=0;
  z:=Матем.МАШЕПС*Ai;
  ПОКА МОДУЛЬ(V) > z ВЫП
    U:=(n-b)*x/n;
    T:=T*U;
    V:=T/(a+n);
    s:=s+V;
    n:=n+1;
  КОН;
  s:=s+T1;
  s:=s+Ai;

  U:=a*Матем.ln(x);
  ЕСЛИ (a+b < МАКСГ) И (МОДУЛЬ(U) < Матем.МАКСЛН) ТО
    T:=Г(a+b)/(Г(a)*Г(b));
    s:=s*T*Матем.степВВ(x,a)
  ИНАЧЕ
    T:=lnГ(a+b)-lnГ(a)-lnГ(b)+U+Матем.ln(s);
    ЕСЛИ T < Матем.МИНЛН ТО
      s:=0
    ИНАЧЕ
      s:=Матем.exp(T) 
    КОН
  КОН;
  ВОЗВРАТ s
КОН PSeries;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА CFrac1(a,b,x:Вещ):Вещ;
(* Цепная дробь для расширения # 1 в неполном бета интеграле. *)
ПЕР
  Xk,Pk,Pkm1,Pkm2,Qk,Qkm1,Qkm2,K1,K2,K3,K4,K5,K6,K7,K8,r,T,ответ,Thresh:Вещ;
  n:ЦЕЛ;
УКАЗ
  K1:=a;
  K2:=a+b;
  K3:=a;
  K4:=a+1;
  K5:=1;
  K6:=b-1;
  K7:=K4;
  K8:=a+2;

  Pkm2:=0;
  Qkm2:=1;
  Pkm1:=1;
  Qkm1:=1;
  ответ:=1;
  r:=1;
  n:=0;
  Thresh:=3*Матем.МАШЕПС;

  ПОВТОРЯТЬ 
    Xk:=-(x*K1*K2)/(K3*K4);
    Pk:=Pkm1+Pkm2*Xk;
    Qk:=Qkm1+Qkm2*Xk;
    Pkm2:=Pkm1;
    Pkm1:=Pk;
    Qkm2:=Qkm1;
    Qkm1:=Qk;

    Xk:=(x*K5*K6)/(K7*K8);
    Pk:=Pkm1+Pkm2*Xk;
    Qk:=Qkm1+Qkm2*Xk;
    Pkm2:=Pkm1;
    Pkm1:=Pk;
    Qkm2:=Qkm1;
    Qkm1:=Qk;

    ЕСЛИ Qk # 0 ТО r:=Pk/Qk КОН;

    ЕСЛИ r # 0 ТО
      T:=МОДУЛЬ((ответ-r)/r);
      ответ:=r
    ИНАЧЕ
      T:=1 
    КОН;

    ЕСЛИ T < Thresh ТО
      ВОЗВРАТ ответ;
    КОН;

    K1:=K1+1;
    K2:=K2+1;
    K3:=K3+2;
    K4:=K4+2;
    K5:=K5+1;
    K6:=K6-1;
    K7:=K7+2;
    K8:=K8+2;

    ЕСЛИ МОДУЛЬ(Qk)+МОДУЛЬ(Pk) > BIG ТО
      Pkm2:=Pkm2*BIGINV;
      Pkm1:=Pkm1*BIGINV;
      Qkm2:=Qkm2*BIGINV;
      Qkm1:=Qkm1*BIGINV
    КОН;

    ЕСЛИ (МОДУЛЬ(Qk) < BIGINV) ИЛИ (МОДУЛЬ(Pk) < BIGINV) ТО
      Pkm2:=Pkm2*BIG;
      Pkm1:=Pkm1*BIG;
      Qkm2:=Qkm2*BIG;
      Qkm1:=Qkm1*BIG
    КОН;
    n:=n+1
  ДО n > 400;
  Матем.код:=Матем.ОБНУЛЕНИЕ;
  ВОЗВРАТ ответ
КОН CFrac1;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА CFrac2(a,b,x:Вещ):Вещ;
(* Цепная дробь для расширения # 2 в неполном бета интеграле. *)
ПЕР
  Xk,Pk,Pkm1,Pkm2,Qk,Qkm1,Qkm2,K1,K2,K3,K4,K5,K6,K7,K8,r,T,z,ответ,Thresh:Вещ;
  n:ЦЕЛ;
УКАЗ
  K1:=a;
  K2:=b-1;
  K3:=a;
  K4:=a+1;
  K5:=1;
  K6:=a+b;
  K7:=a+1;
  K8:=a+2;

  Pkm2:=0;
  Qkm2:=1;
  Pkm1:=1;
  Qkm1:=1;
  z:=x/(1-x);
  ответ:=1;
  r:=1;
  n:=0;
  Thresh:=3*Матем.МАШЕПС;

  ПОВТОРЯТЬ 
    Xk:=-(z*K1*K2)/(K3*K4);
    Pk:=Pkm1+Pkm2*Xk;
    Qk:=Qkm1+Qkm2*Xk;
    Pkm2:=Pkm1;
    Pkm1:=Pk;
    Qkm2:=Qkm1;
    Qkm1:=Qk;

    Xk:=(z*K5*K6)/(K7*K8);
    Pk:=Pkm1+Pkm2*Xk;
    Qk:=Qkm1+Qkm2*Xk;
    Pkm2:=Pkm1;
    Pkm1:=Pk;
    Qkm2:=Qkm1;
    Qkm1:=Qk;

    ЕСЛИ Qk # 0 ТО r:=Pk/Qk КОН;

    ЕСЛИ r # 0 ТО
      T:=МОДУЛЬ((ответ-r)/r);
      ответ:=r
    ИНАЧЕ
      T:=1 
    КОН;

    ЕСЛИ T < Thresh ТО
      ВОЗВРАТ ответ
    КОН;

    K1:=K1+1;
    K2:=K2-1;
    K3:=K3+2;
    K4:=K4+2;
    K5:=K5+1;
    K6:=K6+1;
    K7:=K7+2;
    K8:=K8+2;

    ЕСЛИ МОДУЛЬ(Qk)+МОДУЛЬ(Pk) > BIG ТО
      Pkm2:=Pkm2*BIGINV;
      Pkm1:=Pkm1*BIGINV;
      Qkm2:=Qkm2*BIGINV;
      Qkm1:=Qkm1*BIGINV
    КОН;

    ЕСЛИ (МОДУЛЬ(Qk) < BIGINV) ИЛИ (МОДУЛЬ(Pk) < BIGINV) ТО
      Pkm2:=Pkm2*BIG;
      Pkm1:=Pkm1*BIG;
      Qkm2:=Qkm2*BIG;
      Qkm1:=Qkm1*BIG
    КОН;
    n:=n+1
  ДО n > 400;
  Матем.код:=Матем.ОБНУЛЕНИЕ;
  ВОЗВРАТ ответ
КОН CFrac2;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА НепБета-(a,b,x:Вещ):Вещ;
ПЕР
  A1,B1,x1,T,W,Xc,y:Вещ;
  Flag:КЛЮЧ;
УКАЗ
  Матем.код:=0;

  ЕСЛИ (a <= 0) ИЛИ (b <= 0) ИЛИ (x < 0) ИЛИ (x > 1) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;

  ЕСЛИ (x = 0) ИЛИ (x = 1) ТО
    ВОЗВРАТ x
  КОН;

  Flag:=ОТКЛ;
  ЕСЛИ (b*x <= 1) И (x <= 0.95) ТО
    T:=PSeries(a,b,x);
    ЕСЛИ Flag ТО
      ЕСЛИ T <= Матем.МАШЕПС ТО
        T:=1-Матем.МАШЕПС
      ИНАЧЕ
        T:=1-T 
      КОН 
    КОН;
    ВОЗВРАТ T
  КОН;

  W:=1-x;

  (* Поменять местами < a > с < b >, если < x > больше среднего. *)
  ЕСЛИ x > a/(a+b) ТО
    Flag:=ВКЛ;
    A1:=b;
    B1:=a;
    Xc:=x;
    x1:=W
  ИНАЧЕ
    A1:=a;
    B1:=b;
    Xc:=W;
    x1:=x
  КОН;

  ЕСЛИ Flag И (B1*x1 <= 1) И (x1 <= 0.95) ТО
    T:=PSeries(A1,B1,x1);
    ЕСЛИ Flag ТО
      ЕСЛИ T <= Матем.МАШЕПС ТО
        T:=1-Матем.МАШЕПС
      ИНАЧЕ
        T:=1-T 
      КОН 
    КОН;
    ВОЗВРАТ T
  КОН;

  (* Применить расширение для лучшей сходимости *)
  y:=x1*(A1+B1-2)-(A1-1);
  ЕСЛИ y < 0 ТО
    W:=CFrac1(A1,B1,x1)
  ИНАЧЕ
    W:=CFrac2(A1,B1,x1)/Xc 
  КОН;

  (* Умножение w на
   *                         _     _
   *   xa(1-x)bГ(a+b)/( a | (a) | (b) )    *)

  y:=A1*Матем.ln(x1);
  T:=B1*Матем.ln(Xc);
  ЕСЛИ (A1+B1 < МАКСГ) И (МОДУЛЬ(y) < Матем.МАКСЛН) И (МОДУЛЬ(T) < Матем.МАКСЛН) ТО
    T:=Матем.степВВ(Xc,B1);
    T:=T*Матем.степВВ(x1,A1);
    T:=T/A1;
    T:=T*W;
    T:=T*Г(A1+B1)/(Г(A1)*Г(B1));
  ИНАЧЕ
    (* Resort to logarithms *)
    y:=y+T+lnГ(A1+B1)-lnГ(A1)-lnГ(B1)+Матем.ln(W/A1);
    ЕСЛИ y < Матем.МИНЛН ТО
      T:=0
    ИНАЧЕ
      T:=Матем.exp(y) 
    КОН
  КОН;

  ЕСЛИ Flag ТО
    ЕСЛИ T <= Матем.МАШЕПС ТО
      T:=1-Матем.МАШЕПС
    ИНАЧЕ
      T:=1-T 
    КОН 
  КОН;

  ВОЗВРАТ T;
КОН НепБета;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА erf-(x:Вещ):Вещ;
УКАЗ
  ЕСЛИ x < 0 ТО
    ВОЗВРАТ -НепГ(0.5,Матем.кв(x))
  КОН;
  ВОЗВРАТ НепГ(0.5,Матем.кв(x))
КОН erf;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА erfc-(x:Вещ):Вещ;
УКАЗ
  ЕСЛИ x < 0 ТО
    ВОЗВРАТ 1+НепГ(0.5,Матем.кв(x))
  КОН;
  ВОЗВРАТ ДопГ(0.5,Матем.кв(x))
КОН erfc;

(*----------------------------------------------------------------------------*
 * Распределение вероятностей
 *----------------------------------------------------------------------------*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА БиномВ-(n:ЦЕЛ; p:Вещ; k:ЦЕЛ):Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (p < 0) ИЛИ (p > 1) ИЛИ (n <= 0) ИЛИ (n < k) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ЕСЛИ k = 0 ТО
    ВОЗВРАТ Матем.степВЦ(1-p,n)
  КОН;
  ЕСЛИ k = n ТО
    ВОЗВРАТ Матем.степВЦ(p,n)
  КОН;
  ВОЗВРАТ БиномКоэф(n,k)*Матем.степВЦ(p,k)*Матем.степВЦ(1-p,n-k)
КОН БиномВ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА БиномП-(n:ЦЕЛ; p:Вещ; k:ЦЕЛ):Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (p < 0) ИЛИ (p > 1) ИЛИ (n <= 0) ИЛИ (n < k) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ЕСЛИ k = 0 ТО
    ВОЗВРАТ Матем.степВЦ(1-p,n)
  КОН;
  ЕСЛИ k = n ТО
    ВОЗВРАТ 1
  КОН;
  ВОЗВРАТ 1-НепБета(k+1,n-k,p)
КОН БиномП;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ПуассонВ-(Mu:Вещ; k:ЦЕЛ):Вещ;
ПЕР
  p:Вещ;
  i:ЦЕЛ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (Mu <= 0) ИЛИ (k < 0) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ЕСЛИ k = 0 ТО
    ВОЗВРАТ Матем.exp(-Mu)
  КОН;
  p:=Mu;
  ОТ i:=2 ДО k ВЫП
    p:=p*Mu/i 
  КОН;
  ВОЗВРАТ Матем.exp(-Mu)*p
КОН ПуассонВ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ПуассонП-(Mu:Вещ; k:ЦЕЛ):Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (Mu <= 0) ИЛИ (k < 0) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ЕСЛИ k = 0 ТО
    ВОЗВРАТ Матем.exp(-Mu)
  КОН;
  ВОЗВРАТ ДопГ(k+1,Mu)
КОН ПуассонП;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА НормПл-(x:Вещ):Вещ;
УКАЗ
  ВОЗВРАТ Матем.exp(-0.5*Матем.кв(x))/Матем.КВКОР2ПИ
КОН НормПл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА НормП-(x:Вещ):Вещ;
УКАЗ
  ВОЗВРАТ 0.5*(1+erf(x*Матем.КВКОР2/2))
КОН НормП;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ОбрНорм-(p:Вещ):Вещ;
(* Обратная функция нормального распределения
 * Возвращает такое < x >, при котором площадь под графиком функции плотности
 * вероятности Гауссова распределения (от -БСК до < x >) равна < p >. *)
ПЕР
  x,y,z,y2,x0,x1:Вещ;
  Code:ЦЕЛ;
УКАЗ
  ЕСЛИ (p <= 0) ИЛИ (p >= 1) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0;
  КОН;

  Code:=1;
  y:=p;
  ЕСЛИ y > (1-0.13533528323661269189) ТО (* 0.135... = Матем.exp(-2) *)
    y:=1-y;
    Code:=0;
  КОН;
  ЕСЛИ y > 0.13533528323661269189 ТО
    y:=y-0.5;
    y2:=y*y;
    x:=y+y*(y2*Горнер0(y2,INP0,7)/Горнер1(y2,INQ0,7));
    x:=x*Матем.КВКОР2ПИ;
    ВОЗВРАТ x
  КОН;

  x:=Матем.квкор(-2*Матем.ln(y));
  x0:=x-Матем.ln(x)/x;
  z:=1/x;
  ЕСЛИ x < 8 ТО
    x1:=z*Горнер0(z,INP1,9)/Горнер1(z,INQ1,9)
  АЕСЛИ x < 32 ТО
    x1:=z*Горнер0(z,INP2,7)/Горнер1(z,INQ2,7)
  ИНАЧЕ
    x1:=z*Горнер0(z,INP3,7)/Горнер1(z,INQ3,7)
  КОН;
  x:=x0-x1;
  ЕСЛИ Code # 0 ТО x:=-x КОН;
  ВОЗВРАТ x
КОН ОбрНорм;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА НормВ-(x:Вещ):Вещ;
ПЕР
  a:Вещ;
УКАЗ
  a:=МОДУЛЬ(x);
  Матем.код:=0;
  ЕСЛИ a = 0 ТО
    ВОЗВРАТ 1
  КОН;
  ЕСЛИ a < 1 ТО
    ВОЗВРАТ 1-erf(a*Матем.КВКОР2/2)
  КОН;
  ВОЗВРАТ erfc(a*Матем.КВКОР2/2)
КОН НормВ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА СтьюдентПл-(Nu:ЦЕЛ; x:Вещ):Вещ;
ПЕР
  l,p,q:Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ Nu < 1 ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  p:=0.5*(Nu+1);
  q:=0.5*Nu;
  l:=lnГ(p)-lnГ(q)-0.5*Матем.ln(Nu*Матем.ПИ)-p*Матем.ln(1+Матем.кв(x)/Nu);
  ВОЗВРАТ Матем.exp(l)
КОН СтьюдентПл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА СтьюдентП-(Nu:ЦЕЛ; x:Вещ):Вещ;
ПЕР
  f:Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ Nu < 1 ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ЕСЛИ x = 0 ТО
    ВОЗВРАТ 0.5
  КОН;
  f:=0.5*НепБета(0.5*Nu,0.5,Nu/(Nu+Матем.кв(x)));
  ЕСЛИ x < 0 ТО
    ВОЗВРАТ f
  ИНАЧЕ
    ВОЗВРАТ 1-f
  КОН
КОН СтьюдентП;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА СтьюдентВ-(Nu:ЦЕЛ; x:Вещ):Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ Nu < 1 ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ВОЗВРАТ НепБета(0.5*Nu,0.5,Nu/(Nu+Матем.кв(x)))
КОН СтьюдентВ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Хи2Пл-(Nu:ЦЕЛ; x:Вещ):Вещ;
УКАЗ
  Матем.код:=0;
  ВОЗВРАТ ГПл(0.5*Nu,0.5,x)
КОН Хи2Пл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Хи2П-(Nu:ЦЕЛ; x:Вещ):Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (Nu < 1) ИЛИ (x <= 0) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ВОЗВРАТ НепГ(0.5*Nu,0.5*x)
КОН Хи2П;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Хи2В-(Nu:ЦЕЛ; x:Вещ):Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (Nu < 1) ИЛИ (x <= 0) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ВОЗВРАТ ДопГ(0.5*Nu,0.5*x)
КОН Хи2В;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ФишерПл-(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ;
ПЕР
  p1,p2,r,s,l:Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (Nu1 < 1) ИЛИ (Nu2 < 1) ИЛИ (x <= 0) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  r:=Nu1 ДЕЛИТЬ Nu2;
  p1:=0.5*Nu1;
  p2:=0.5*Nu2;
  s:=p1+p2;
  l:=lnГ(s)-lnГ(p1)-lnГ(p2)+p1*Матем.ln(r);
  l:=l+(p1-1)*Матем.ln(x)-s*Матем.ln(1+r*x);
  ВОЗВРАТ Матем.exp(l)
КОН ФишерПл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ФишерП-(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (Nu1 < 1) ИЛИ (Nu2 < 1) ИЛИ (x <= 0) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ВОЗВРАТ 1-НепБета(0.5*Nu2,0.5*Nu1,Nu2/(Nu2+Nu1*x))
КОН ФишерП;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ФишерВ-(Nu1,Nu2:ЦЕЛ; x:Вещ):Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (Nu1 < 1) ИЛИ (Nu2 < 1) ИЛИ (x <= 0) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ВОЗВРАТ НепБета(0.5*Nu2,0.5*Nu1,Nu2/(Nu2+Nu1*x))
КОН ФишерВ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ЭкспПл-(a,x:Вещ):Вещ;
УКАЗ
  ЕСЛИ (a <= 0) ИЛИ (x < 0) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ВОЗВРАТ a*Матем.exp(-a*x)
КОН ЭкспПл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ЭкспП-(a,x:Вещ):Вещ;
УКАЗ
  ЕСЛИ (a <= 0) ИЛИ (x < 0) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ВОЗВРАТ 1-Матем.exp(-a*x)
КОН ЭкспП;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА БетаПл-(a,b,x:Вещ):Вещ;
ПЕР
  l:Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (a <= 0) ИЛИ (b <= 0) ИЛИ (x < 0) ИЛИ (x > 1) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ЕСЛИ x = 0 ТО
    ЕСЛИ a < 1 ТО 
      Матем.код:=Матем.ОСОБЕННОСТЬ;
      ВОЗВРАТ 0 
    КОН;
    ВОЗВРАТ 0
  КОН;
  ЕСЛИ x = 1 ТО
    ЕСЛИ b < 1 ТО 
      Матем.код:=Матем.ОСОБЕННОСТЬ;
      ВОЗВРАТ 0 
    КОН;
    ВОЗВРАТ 0
  КОН;
  l:=lnГ(a+b)-lnГ(a)-lnГ(b);
  l:=l+(a-1)*Матем.ln(x)+(b-1)*Матем.ln(1-x);
  ВОЗВРАТ Матем.exp(l)
КОН БетаПл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА БетаП-(a,b,x:Вещ):Вещ;
УКАЗ
  ВОЗВРАТ НепБета(a,b,x)
КОН БетаП;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ГПл-(a,b,x:Вещ):Вещ;
ПЕР
  l:Вещ;
УКАЗ
  Матем.код:=0;
  ЕСЛИ (a <= 0) ИЛИ (b <= 0) ИЛИ (x < 0) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    ВОЗВРАТ 0
  КОН;
  ЕСЛИ x = 0 ТО
    ЕСЛИ a < 1 ТО
      Матем.код:=Матем.ОСОБЕННОСТЬ;
      ВОЗВРАТ 0
    КОН;
    ЕСЛИ a = 1 ТО
      ВОЗВРАТ b
    КОН;
    ВОЗВРАТ 0
  КОН;
  l:=a*Матем.ln(b)-lnГ(a)+(a-1)*Матем.ln(x)-b*x;
  ВОЗВРАТ Матем.exp(l)
КОН ГПл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ГП-(a,b,x:Вещ):Вещ;
УКАЗ
  ВОЗВРАТ НепГ(a,b*x)
КОН ГП;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
УКАЗ
  ТаблФакт[0]:=1;
  ТаблФакт[1]:=1;
  ТаблФакт[2]:=2;
  ОТ i:=3 ДО ТАБЛФАКТ-1 ВЫП
    ТаблФакт[i]:=ТаблФакт[i-1]*i 
  КОН;

  STIR[0]:= 7.147391378143610789273D-4;
  STIR[1]:=-2.363848809501759061727D-5;
  STIR[2]:=-5.950237554056330156018D-4;
  STIR[3]:= 6.989332260623193171870D-5;
  STIR[4]:= 7.840334842744753003862D-4;
  STIR[5]:=-2.294719747873185405699D-4;
  STIR[6]:=-2.681327161876304418288D-3;
  STIR[7]:= 3.472222222230075327854D-3;
  STIR[8]:= 8.333333333333331800504D-2;
  STIR[9]:= 0;

  GAMS[0]:=-1.193945051381510095614D-3;
  GAMS[1]:= 7.220599478036909672331D-3;
  GAMS[2]:=-9.622023360406271645744D-3;
  GAMS[3]:=-4.219773360705915470089D-2;
  GAMS[4]:= 1.665386113720805206758D-1;
  GAMS[5]:=-4.200263503403344054473D-2;
  GAMS[6]:=-6.558780715202540684668D-1;
  GAMS[7]:= 5.772156649015328608253D-1;
  GAMS[8]:= 1.000000000000000000000D0;
  GAMS[9]:= 0;

  GAMSN[0]:= 1.133374167243894382010D-3;
  GAMSN[1]:= 7.220837261893170325704D-3;
  GAMSN[2]:= 9.621911155035976733706D-3;
  GAMSN[3]:=-4.219773343731191721664D-2;
  GAMSN[4]:=-1.665386113944413519335D-1;
  GAMSN[5]:=-4.200263503402112910504D-2;
  GAMSN[6]:= 6.558780715202536547116D-1;
  GAMSN[7]:= 5.772156649015328608727D-1;
  GAMSN[8]:=-1.000000000000000000000D0;
  GAMSN[9]:= 0;

  STIRP[0]:= 4.885026142432270781165D-3;
  STIRP[1]:=-1.880801938119376907179D-3;
  STIRP[2]:= 8.412723297322498080632D-4;
  STIRP[3]:=-5.952345851765688514613D-4;
  STIRP[4]:= 7.936507795855070755671D-4;
  STIRP[5]:=-2.777777777750349603440D-3;
  STIRP[6]:= 8.333333333333331447505D-2;
  STIRP[7]:= 0;

  GAMP[0]:= 4.212760487471622013093D-5;
  GAMP[1]:= 4.542931960608009155600D-4;
  GAMP[2]:= 4.092666828394035500949D-3;
  GAMP[3]:= 2.385363243461108252554D-2;
  GAMP[4]:= 1.113062816019361559013D-1;
  GAMP[5]:= 3.629515436640239168939D-1;
  GAMP[6]:= 8.378004301573126728826D-1;
  GAMP[7]:= 1.000000000000000000009D0;
  GAMP[8]:= 0;

  GAMQ[0]:=-1.397148517476170440917D-5;
  GAMQ[1]:= 2.346584059160635244282D-4;
  GAMQ[2]:=-1.237799246653152231188D-3;
  GAMQ[3]:=-7.955933682494738320586D-4;
  GAMQ[4]:= 2.773706565840072979165D-2;
  GAMQ[5]:=-4.633887671244534213831D-2;
  GAMQ[6]:=-2.243510905670329164562D-1;
  GAMQ[7]:= 4.150160950588455434583D-1;
  GAMQ[8]:= 9.999999999999999999908D-1;
  GAMQ[9]:= 0;
  
  LNGAMP[0]:=-2.163690827643812857640D3;
  LNGAMP[1]:=-8.723871522843511459790D4;
  LNGAMP[2]:=-1.104326814691464261197D6;
  LNGAMP[3]:=-6.111225012005214299996D6;
  LNGAMP[4]:=-1.625568062543700591014D7;
  LNGAMP[5]:=-2.003937418103815175475D7;
  LNGAMP[6]:=-8.875666783650703802159D6;
  LNGAMP[7]:= 0;
  LNGAMP[8]:= 0;
  LNGAMP[9]:= 0;

  LNGAMQ[0]:=-5.139481484435370143617D2;
  LNGAMQ[1]:=-3.403570840534304670537D4;
  LNGAMQ[2]:=-6.227441164066219501697D5;
  LNGAMQ[3]:=-4.814940379411882186630D6;
  LNGAMQ[4]:=-1.785433287045078156959D7;
  LNGAMQ[5]:=-3.138646407656182662088D7;
  LNGAMQ[6]:=-2.099336717757895876142D7;
  LNGAMQ[7]:= 0;
  LNGAMQ[8]:= 0;
  LNGAMQ[9]:= 0;

  INP0[0]:= 8.779679420055069160496D-3;
  INP0[1]:=-7.649544967784380691785D-1;
  INP0[2]:= 2.971493676711545292135D0;
  INP0[3]:=-4.144980036933753828858D0;
  INP0[4]:= 2.765359913000830285937D0;
  INP0[5]:=-9.570456817794268907847D-1;
  INP0[6]:= 1.659219375097958322098D-1;
  INP0[7]:=-1.140013969885358273307D-2;
  INP0[8]:= 0;
  INP0[9]:= 0;

  INQ0[0]:=-5.303846964603721860329D0;
  INQ0[1]:= 9.908875375256718220854D0;
  INQ0[2]:=-9.031318655459381388888D0;
  INQ0[3]:= 4.496118508523213950686D0;
  INQ0[4]:=-1.250016921424819972516D0;
  INQ0[5]:= 1.823840725000038842075D-1;
  INQ0[6]:=-1.088633151006419263153D-2;
  INQ0[7]:= 0;
  INQ0[8]:= 0;
  INQ0[9]:= 0;

  INP1[0]:= 4.302849750435552180717D0;
  INP1[1]:= 4.360209451837096682600D1;
  INP1[2]:= 9.454613328844768318162D1;
  INP1[3]:= 9.336735653151873871756D1;
  INP1[4]:= 5.305046472191852391737D1;
  INP1[5]:= 1.775851836288460008093D1;
  INP1[6]:= 3.640308340137013109859D0;
  INP1[7]:= 3.691354900171224122390D-1;
  INP1[8]:= 1.403530274998072987187D-2;
  INP1[9]:= 1.377145111380960566197D-4;

  INQ1[0]:= 2.001425109170530136741D1;
  INQ1[1]:= 7.079893963891488254284D1;
  INQ1[2]:= 8.033277265194672063478D1;
  INQ1[3]:= 5.034715121553662712917D1;
  INQ1[4]:= 1.779820137342627204153D1;
  INQ1[5]:= 3.845554944954699547539D0;
  INQ1[6]:= 3.993627390181238962857D-1;
  INQ1[7]:= 1.526870689522191191380D-2;
  INQ1[8]:= 1.498700676286675466900D-4;
  INQ1[9]:= 0;

  INP2[0]:= 3.244525725312906932464D0;
  INP2[1]:= 6.856256488128415760904D0;
  INP2[2]:= 3.765479340423144482796D0;
  INP2[3]:= 1.240893301734538935324D0;
  INP2[4]:= 1.740282292791367834724D-1;
  INP2[5]:= 9.082834200993107441750D-3;
  INP2[6]:= 1.617870121822776093899D-4;
  INP2[7]:= 7.377405643054504178605D-7;
  INP2[8]:= 0;
  INP2[9]:= 0;

  INQ2[0]:= 6.021509481727510630722D0;
  INQ2[1]:= 3.528463857156936773982D0;
  INQ2[2]:= 1.289185315656302878699D0;
  INQ2[3]:= 1.874290142615703609510D-1;
  INQ2[4]:= 9.867655920899636109122D-3;
  INQ2[5]:= 1.760452434084258930442D-4;
  INQ2[6]:= 8.028288500688538331773D-7;
  INQ2[7]:= 0;
  INQ2[8]:= 0;
  INQ2[9]:= 0;

  INP3[0]:= 2.020331091302772535752D0;
  INP3[1]:= 2.133020661587413053144D0;
  INP3[2]:= 2.114822217898707063183D-1;
  INP3[3]:=-6.500909615246067985872D-3;
  INP3[4]:=-7.279315200737344309241D-4;
  INP3[5]:=-1.275404675610280787619D-5;
  INP3[6]:=-6.433966387613344714022D-8;
  INP3[7]:=-7.772828380948163386917D-11;
  INP3[8]:= 0;
  INP3[9]:= 0;

  INQ3[0]:= 2.278210997153449199574D0;
  INQ3[1]:= 2.345321838870438196534D-1;
  INQ3[2]:=-6.916708899719964982855D-3;
  INQ3[3]:=-7.908542088737858288849D-4;
  INQ3[4]:=-1.387652389480217178984D-5;
  INQ3[5]:=-7.001476867559193780666D-8;
  INQ3[6]:=-8.458494263787680376729D-11;
  INQ3[7]:= 0;
  INQ3[8]:= 0;
  INQ3[9]:= 0
КОН Функц.
 
 


Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com

 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы